<?php
namespace app\common\model\base;

use think\Model;
use think\Db;
use think\Cache;

/*************************************************  
*ClassName:     System
*Description:   系统设置
*Others:        com_id为保留扩展字段 com_id 默认为1
*************************************************/

class System extends Model
{
    // 设置当前模型对应的完整数据表名称
    protected $table = 'ys_system';

    /**
     * set 设置更新公司值 操作system表。无值就添加，有值就更新
     * 使用事例  $data = ['abcd' => 133, 'ccde' => 222],
     * 可以设置多条信息,abcd代表name字段的值,133代表value制度的值
     * @karl
     * @DateTime 2016-07-31T07:42:03+0800
     * @param    array                 $data   设置值
     * @param    int                   $com_id 公司id
     * @return   array                 [error_code, error_msg, com_id=> [] ] 返回结果
     */
    static public function set($data, $com_id = 1)
    {
        $error = [];
        foreach ($data as $key => $value) {
            $array = ['name' => $key, 'value' => $value, 'com_id' => $com_id];
            $row = self::get(['name' => $key]);
            if ($row) {
                if (!DB::name("system")->where('name',$key)->update($array)) {
                    $error[] = "updata $key error,the value is $value";
                }
            } else {
                if (!DB::name("system")->insert($array)) {
                    $error[] = "insert $key error,the value is $value";
                }
            }  
            $lists = Cache::get($key);//获取缓存数据，如果有，则清空然后更新
            if(!empty($lists)){
                Cache::rm($key);
            }else{
                 Cache::set($key,$array,36000);
            }          
        }
        if (count($error)) {
            $result['error_code'] = 0;
            $result['error_msg'] = '';
            $result['com_id'] = $error;
        } else  {
            $result['error_code'] = 1;
            $result['error_msg'] = '操作完成';
        }
        return array('result' => $result, 'error' => $error);
    }

    /**
     * getValue 得到值
     * @karl
     * @DateTime 2016-08-02T07:41:49+0800
     * @param    string                   $name   标识
     * @param    integer                  $com_id 公司ID
     * @return   array                    [error_code, error_msg, data=> []
     */
    static public function getValue($name, $com_id = 1)
    {
        $lists = Cache::get($name);//获取缓存数据，如果没有，则从数据库中拿       
        if(empty($lists)){
            $row = self::get(['name' => $name, 'com_id' => $com_id]);
            if ($row) {
                $result['error_code'] = 0;
                $result['error_msg'] = '';
                $result['data'] = $row['value'];
                Cache::set($name,$row,36000);
            } else {
                $result['error_code'] = 1;
                $result['error_msg'] = '得到失败';
                $result['data'] = '';
            }
            return $result;
        }else{
            return [$lists['value'], 'error_code' => 0,'error_msg' => ''];
        }
       
    }
    /**
     * getInfo 得到系统信息
     * @karl
     * @DateTime 2016-07-31T07:38:20+0800
     * @param    int                      $com_id 公司id
     * @return   array                    [error_code, error_msg, data] 
     */
    static public function getInfo($com_id = 1)
    {
        $lists = Cache::get($com_id);//获取缓存数据，如果没有，则从数据库中拿
        if(empty($lists)){
            $out_array = [];
            if ($array = DB::name("system")->where(['com_id' => $com_id])->select()) {
                foreach($array as $row) {
                    $out_array[$row['name']] = $row['value'];
                }
                $result['error_code'] = 0;
                $result['error_msg'] = '';
                $result['data'] = $out_array;
            } else {
                $result['error_code'] = 1;
                $result['error_msg'] = '没有得到com_info信息';
            }
            Cache::set($com_id,$out_array,36000);
            return $result;
        }else{
            return [$lists, 'error_code' => 0,'error_msg' => ''];
        }

    }
    /**
     * getOne 得到一条系统信息
     * @karl
     * @DateTime 2016-08-02T07:41:49+0800
     * @param    string                   $name   标识
     * @param    integer                  $com_id 公司ID
     * @return   array                    [error_code, error_msg, data=> []
     */
    static public function getOne($name, $com_id = 1)
    {
        $lists = Cache::get($name);//获取缓存数据，如果没有，则从数据库中拿
        if(empty($lists)){
            $row = self::get(['name' => $name, 'com_id' => $com_id]);
            if ($row) {
                $result['error_code'] = 0;
                $result['error_msg'] = '';
                $result['data'] = $row;
                Cache::set($name,$row,36000);
            } else {
                $result['error_code'] = 1;
                $result['error_msg'] = '得到失败';
                $result['data'] = '';
            }            
            return $result;
        }else{
            return [$lists, 'error_code' => 0,'error_msg' => ''];
        }       
    }

}